﻿using Microsoft.Extensions.DependencyInjection;

namespace FreeDream.Infrastructure
{
    public static class CorsSetup
    {
        /// <summary>
        /// CORS的配置一定要放在AutoFac前面,否则builder.Populate(services);后,你再进行配置会没有效果。
        /// </summary>
        /// <param name="services"></param>
        /// <exception cref="ArgumentNullException"></exception>
        public static void AddCorsSetup(this IServiceCollection services)
        {
            if (services == null)
            {
                throw new ArgumentNullException(nameof(services));
            }

            services.AddCors(c => 
            {
                if (false)
                {
                    //一般采用这种方法
                    c.AddPolicy("LimitRequests", policy =>
                    {
                        policy
                        .WithOrigins("http://127.0.0.1:1818", "http://localhost:8080", "http://localhost:8021", "http://localhost:8081", "http://localhost:1818")//支持多个域名端口，注意端口号后不要带/斜杆：比如localhost:8000/，是错的
                        .AllowAnyHeader()//Ensures that the policy allows any header.
                        .AllowAnyMethod();
                    });
                }
                else
                {
                    //↓↓↓↓↓↓↓注意正式环境不要使用这种全开放的处理↓↓↓↓↓↓↓↓↓↓
                    //允许任意跨域请求
                    c.AddPolicy("AllRequests", policy =>
                    {
                        policy
                        .SetIsOriginAllowed(_ => true)
                        .AllowAnyMethod()
                        .AllowAnyHeader()
                        .AllowCredentials();
                    });
                    //↑↑↑↑↑↑↑注意正式环境不要使用这种全开放的处理↑↑↑↑↑↑↑↑↑↑
                }

            });

            #region 跨域

            //跨域第一种版本，请要ConfigureService中配置服务 services.AddCors();
            //app.UseCors(options => options.WithOrigins("http://localhost:8021").AllowAnyHeader().AllowAnyMethod());

            //app.UserCors("LimitRequests");    //  将Cors中间件添加到应用

            //注意：如果你使用了 app.UserMvc() 或者 app.UseHttpsRedirection()这类的中间件，一定要把 app.UseCors() 写在它们的上边，先进行跨域，再进行 Http 请求，否则会提示跨域失败

            #endregion

        }
    }
}
